home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / qb2 / pro15 / ball.bas < prev    next >
BASIC Source File  |  1990-08-20  |  4KB  |  124 lines

  1.  '******************************************************************************
  2.  '* BALL - Bouncing ball animation demo using XOR option.                      *
  3.  '*                                                                            *
  4.  '* Written for GRAFIX by:  Joseph A. Albrecht                                 *
  5.  '*                                                                            *
  6.  '* Press ESC to exit program                                                  *
  7.  '* Press F3 to toggle sound on/off                                            *
  8.  '* Press F5 to toggle clipping mode                                           *
  9.  '* Press F10 to toggle between 320 and 640 graphics modes                     *
  10.  '******************************************************************************
  11.  '$INCLUDE: 'GRAFQBS.INC' 
  12.  'The above line is for QuickBASIC.
  13.  
  14.  ''$INCLUDE "GRAFTBS.INC"
  15.  'The above line is for TURBO BASIC. Remove the  ''  to compile the program.
  16.  
  17.  ''$INCLUDE "GRAFPBS.INC"
  18.  'The above line is for PowerBASIC. Remove the  ''  to compile the program.
  19.  
  20.  DIM Ball(115), B(280), Notes(84)
  21.  Graphics = 320
  22.  XOffset = 0
  23.  Clip = 0
  24.  DoSound = 1
  25.  CALL GetTandy11(Tandy11%)
  26.  CALL AudioOff
  27.  CALL MediumGraphics
  28.  
  29.  FOR I = 1 TO 84
  30.    READ Notes(I)
  31.  NEXT
  32.  FOR X = 20 TO 280 STEP 4
  33.    B(X) = 159 - CINT(ABS(SIN(X * .07853981#) * X) \ 2)
  34.  NEXT X
  35.  
  36. Again:
  37.  CALL ResetView
  38.  CALL ClearScreen
  39.  CALL SetBackColor(LightGray)
  40.  CALL ExtCircleC(160, 100, 10, DarkGray)
  41.  CALL ExtPaint(160, 100, DarkGray, DarkGray)
  42.  CALL ExtGet(150, 90, 170, 110, Ball(0))
  43.  CALL ClearScreen
  44.  CALL DrawBox(18 + XOffset, 0, 302 + XOffset, 179, Red)
  45.  CALL DrawBox(19 + XOffset, 1, 301 + XOffset, 178, Red)
  46.  IF Clip = 1 THEN
  47.    CALL DrawBox(79 + XOffset, 74, 241 + XOffset, 151, Blue)
  48.    CALL DrawBox(78 + XOffset, 73, 242 + XOffset, 152, Blue)
  49.    CALL SetView(80 + XOffset, 75, 240 + XOffset, 150)
  50.  END IF
  51.  CALL FillBox(160 + XOffset, 2, 190 + XOffset, 177, LightBlue)
  52.  CALL FillBox(191 + XOffset, 2, 222 + XOffset, 177, LightRed)
  53.  CALL FillBox(223 + XOffset, 2, 253 + XOffset, 177, Yellow)
  54.  
  55.  L = 6
  56.  X2 = 20
  57.  Y2 = 150
  58.  CALL ExtPut(X2 + XOffset, Y2, Ball(0), PutXor)
  59.  
  60.  DO
  61.   FOR D = 0 TO 1
  62.     S = 20 + D * 260
  63.     E = 280 - D * 260
  64.     FOR X = S TO E STEP 4 - 8 * D
  65.       Y = B(X)
  66.       N = (210 - Y2) \ 5
  67.       CALL ExtPut(X2 + XOffset, Y2, Ball(0), PutXor%)
  68.       CALL ExtPut(X + XOffset, Y, Ball(0), PutXor%)
  69.       A = 21 / L * .875
  70.       IF DoSound = 1 THEN
  71.     CALL ExtSound(Notes(N), A, 10, 0)
  72.       ELSE
  73.     CALL Pause(A)
  74.       END IF
  75.       X2 = X
  76.       Y2 = Y
  77.       K$ = INKEY$
  78.       K$ = RIGHT$(K$, 1)
  79.       IF K$ = CHR$(27) THEN
  80.     CALL ExitGraphics
  81.     END
  82.       END IF
  83.       IF K$ = CHR$(61) THEN
  84.     IF DoSound = 0 THEN
  85.       DoSound = 1
  86.     ELSE
  87.       DoSound = 0
  88.     END IF
  89.       END IF
  90.       IF K$ = CHR$(63) THEN
  91.     IF Clip = 1 THEN
  92.       Clip = 0
  93.     ELSE
  94.       Clip = 1
  95.     END IF
  96.     GOTO Again
  97.       END IF
  98.       IF K$ = CHR$(68) AND Tandy11% = Tandy11.True% THEN
  99.     IF Graphics = 320 THEN
  100.       Graphics = 640
  101.       XOffset = 160
  102.       CALL HighGraphics
  103.       GOTO Again
  104.     ELSE
  105.       Graphics = 320
  106.       XOffset = 0
  107.       CALL MediumGraphics
  108.       GOTO Again
  109.     END IF
  110.       END IF
  111.     NEXT X
  112.     L = L + 3
  113.     IF L > 21 THEN L = 6
  114.   NEXT D
  115.  LOOP
  116.  
  117.  DATA 65,69,73,78,82,87,93,98,104,110,116,123,131,139,147,156,165,175,185,196
  118.  DATA 208,220,233,247,262,277,294,311,330,349,370,392,415,440,466,494,523,554
  119.  DATA 587,622,659,698,740,784,831,880,932,988,1047,1109,1175,1245,1319,1397
  120.  DATA 1480,1568,1661,1760,1865,1976,2091,2217,2349,2489,2637,2794,2960,3136
  121.  DATA 3322,3520,3729,3951,4186,4435,4699,4978,5274,5587,5919,6271,6645,7040
  122.  DATA 7459,7902
  123.  
  124.